可変長の文字列があります。現在、配列内の最も長い文字列を見つけるために配列を繰り返し処理するループがあります。 LINQを使ってより効率的かつ/またはよりクリーンな方法で書く方法はありますか?LINQを使用して文字列[]内で最も長い文字列を見つける方法
答えて
しかし、のような何かを行うに少しきれいになり、はるかに効率的ではありません。
var strings = new string[] { "1", "02", "003", "0004", "00005" };
string longest = strings.OrderByDescending(s => s.Length).First();
出力:00005
string [] strings;
return strings.OrderByDescending (s => s.Length).First();
string[] arr = new string[] { "a", "aa", "aaa" };
var longest = arr.Where(s => s.Length == arr.Max(m => m.Length)).First();
出力aaa
このようにして、コードは明らかに最大長の文字列を取得しています。
これは確実に機能します。しかし、それはO(N^2)なので、他の答えよりも少し時間がかかります。例:私のマシンで約15のCPUティックで返されますが、これは約390のチックになります。 – vrrathod
はい、私はこれを実現します。私は注文の副作用を使用するのではなく、何をしているかを述べているので、それを置いています。 –
私は現在コンパイラを持っていませんが、これも動作します。
string[] arr = new string[] { "a", "aa", "aaa" };
var longest = arr.Max(w => w.Length)
これは、文字列自体ではなく、最大の長さを検索します。 – Vache
strings.Aggregate(string.Empty, (seed, f) => f.Length > seed.Length ? f : seed);
集計構文は、他の方法より読み少し難しいですが、厳密に言えば、それはソートを必要としないように私はここを参照してください他の方法よりも効率的です。ちょうどO(N)の実装。
EDIT:このアプローチでは、他のほとんどの場合と同様に、f.Lengthがnull ref例外をスローしないように、リストにnull値が存在しないと想定しています。クイック三項演算子(f!= null?f.Length:0)は、それがあなたの列挙体に対して有効であった場合にそれを修正します。
私はそれが確かに質問*と*答えたので、この答えを好む*と*私はそれが最も長い単語の全体のリストが必要とされていないときに単一の項目の答えのために最も効率的だと信じて*文字列も。私から2つの親指!便宜上、ここではうまく機能するコードをテストしました: 'string longest = strings.Aggregate(string。空、(seed、f)=>(f == null?0:f.Length)> seed.Length? f:種子); ' –
これは古い質問ですが、最も効率的な回答は提供されていないと付け加えたいと思います。これは1つのライナーではありませんが、OrderByまたはAggregateが提供しない最長のストリングのコレクションを返します。 Matt Ellenは答えに一番近いが、MaxのWhereでMaxを使用すると、大規模なコレクションを扱うときにはかなり遅くなる。
正しい答えは次のようになります。
int maxLength = collection.Max(x => x.Length);
string[] longestStrings = collection.Where(x => x.Length == maxLength);
が使用することを検討してください?。 (C#6.0では)と??あなたのコレクションにこれらを含めることができる場合、演算子はnull値をチェックします。
訂正:質問は、最長の文字列のリストではなく、1つの文字列を求めます。また、最後のセミコロンをコンパイルする前に '.ToArray() 'が必要です。しかし、私はあなたのコードの最後に単純な '.FirstOrDefault()' vs '.ToArray()'を付けて、最も長い単語または最初の単語のリストを提供するために簡単に使用できるコードを提供することを勧めます。個人的に私はこのソリューションの柔軟性を好むので、私はあなたのソリューションが提供するものに最も似ています。ありがとう! –
- 1. 文字列中で最も長い連続した部分文字列を見つける方法は?
- 2. LINQを使用して文字列のリスト内の部分文字列を見つける方法
- 3. 文字列コレクション内で最も同一の文字列を見つける
- 4. Pythonを使用して文字列の最初の大文字でない文字を見つける方法
- 5. PHP配列内の文字列を見つける最も良い方法は?
- 6. 辞書内の文字列の中で最も長いサブシーケンスを見つける
- 7. Scalaを使用して文字列内の文字の長さを見つける方法Spark
- 8. 文字列配列の長さを見つける方法は?
- 9. プロローグを使用して文字列長を見つける方法
- 10. C++の文字列配列で文字の最長シーケンスを見つける方法(繰り返し)
- 11. 文字列の部分文字列を見つける方法
- 12. Swift - [String]配列の最長文字列を見つけるベストプラクティス
- 13. 文字列の配列内の最短文字列を見つける
- 14. 文字列の最後の文字列を見つける方法
- 15. 文字列pythonで最も長い一意の部分文字列を見つけよう
- 16. OpenJpa JPQLで文字列の長さを見つける方法
- 17. 文字列内で最も使用されている単語を見つける方法PHP
- 18. 文字列内の文字列を見つける
- 19. REGEXは文字列内の文字列を見つける
- 20. 文字列内の不明な文字列を見つける
- 21. 文字列タスク(JavaScript)の中で最も長い単語を見つけるエラー
- 22. 文字列中で最長の単語を見つける
- 23. 文字列中で最長類似サブシーケンスを見つける
- 24. Excel - 文字列内の0でない最初の文字を見つける
- 25. 接尾辞ツリー(バイナリ文字列):最も長い部分文字列を見つけよう
- 26. 文字列内に繰り返し文字を見つける
- 27. anglejsの最後の文字で文字列を見つける方法は?
- 28. RegExを使用して長い文字列の桁を見つける
- 29. LINQを使用して文字列配列内のすべての文字列を逆にする方法は?
- 30. 文字列に最も近いpalindromeを見つける
素晴らしい!ありがとう、私はFirstOrDefault()を使用しています。確かにきれいに見えますが、パフォーマンス面では何か利点はありますか? – vrrathod
@vrrathodパフォーマンスの向上はありません。これまでと同じ反復ロジックを実行していますが、これはLINQの概要である簡潔な構文です。 –
それは確かに同じことをします。ここで私はどのようにテストしたのですか?私は5000文字列の配列を生成しました。 LINQは私のマシンで約15 cpuのダニを取る。私は文字列の長さを比較する古きよきループを書いた。それは0ティックで返されます。 diffの推測は並べ替えのためのものです。 – vrrathod