2017-06-23 30 views
1

文字列の配列内で最短文字列を見つけるための解決策を提示する必要があります。私はそれが戻るために各文字列の長さを比較する必要があると考えていた。私は立ち往生した場所 文字列の配列内の最短文字列を見つける

これ

はある

static void Main(string[] args) 
{ 
    //find the shortest string in an array of string 
    string[] names = new string[3]{ 
     "Tom", "and", "jerry" 
    }; 

    foreach(string name in names){ 
     Console.Write(name + ", "); 
    } 

    Console.ReadKey(); 
} 

誰でも

+0

'everyone' ... yeahhあなたはここに助けを得る方法を正確にthatsの... – ckruczek

+0

何の結果、あなたの例では期待していない「トム」と「と」は同じ長さを持っているので? –

+2

あなたは最短の文字列として "Tom"か "and"をクラスに入れますか?あなたは何を試しましたか? – Sayse

答えて

2

他の人と同様に、LINQを使用できます。これは仕事をする最も簡単な方法ですが、私はいくつかのアルゴリズムを学ぶべきだと思います。配列内の最小/最大値を見つけることは、プログラミングの基礎に属します。ここで

は、あなたはそれについて読むことができます: http://www.stoimen.com/blog/2012/05/21/computer-algorithms-minimum-and-maximum/

純粋なC#のimpementationは、次のようになります。

string[] names = new string[3]{ 
    "Tom", "and", "jerry" 
}; 

string minValue = names[0]; 
foreach (string name in names) 
{ 
    if (name.Length < minValue.Length) 
    { 
      minValue = name; 
    } 
} 

Console.WriteLine(minValue); 
+1

合意。加えて、並べ替えは無駄な時間の無駄です。 – themiurge

+1

ありがとう、それは働いた、私は最大/分の部分を見つけるのにはまっていたが、あなたは私を救って、誰も助けてくれたおかげで。 –

3

使用LINQ部分を比較して説明して私を助けることができます:

var shortestString = names.OrderBy(c => c.Length).FirstOrDefault(); 
+0

私は本当に誰かが何の理由もなくこの投稿を下降させることができたかと思いますか? –

+0

並べ替えは単純な線形検索よりも遅くなります。 – Adrian

+5

@adjanこれは誰かがdownvoteするのには良い理由ではありません。ダウンボートは本当に悪い試行または間違った解答のためです! –

1

は、あなたがこのwihtのLINQを行うことができ、

var shortestName = names.OrderBy(name => name.Length).FirstOrDefault(); 

または

string shortestName = names.Aggregate((a1, a2) => a1.Length <a2.Length ? a1 : a2); 
+2

'names'listにエントリがない場合、これは例外的に終了します。私は 'FirstOrDefault'を代わりに使用します。 –

+0

@MightyBadaboomそうですよ! – Sajeetharan

2

あなたはこのためにMaxByを使用することができます。そして最大のものを見つけるために配列全体をソートしないでください。これは非常に無駄であり、意図的な消耗はソフトウェアのパフォーマンスを低下させる癌です。

+4

おそらくMinByが良いでしょうか? –

+0

@MartinMulderそうです、ありがとうございます。私は必要に応じてMaxByとフリップサインだけを使う傾向がありますが、あなたは正しいです。 –

7

これは、コレクションをソートすることなく、第1の最短の文字列を検索します:

int minLength = names.Min(y=>y.Length); // this gets you the shortest length of all elements in names 
string shortest = names.FirstOrDefault(x=>x.Length == minLength); 

説明:それは、コレクション全体で最小の長さに等しい長さその要素をチェックします。

EDIT:

誰もがその一部を比較し、文字列の長さLengthプロパティを使用して==オペレータを比較するためにそれを

を説明して私を助けることができます。もちろん、これはループでもChoockYと同じように行うことができます。

関連する問題