2016-08-23 3 views
-1

同じ長さ(最大)の複数の文字列がある場合、どのようにすべてのインデックスを見つけるか。私は現在、最初のインデックスを取得しています。これを行うより良い方法はありますか?ここでC#を使用して文中で最も長い単語のインデックス

using System; 
using System.Linq; 

namespace Examples 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Longestword("Find the largest word with lower index abcdefg "); 
      Console.ReadKey(); 
     } 

     private static void Longestword(String sen) 
     { 
      String[] sArray = sen.Split(null); 
      int[] cArr = new int[sArray.Length]; 

      for (int i = 0; i < sArray.Length; i++) 
      { 
       int j = sArray[i].Length; 
       cArr[i] = j; 
      } 
      int max = cArr.Max(); 
      int index = cArr.ToList().IndexOf(max); 
      Console.WriteLine(index); 
     } 
    } 
} 
+4

は問題があるのか​​、私たちは、コードを改善したいですか?最初の場合は、問題を投稿してください。 2番目の場合、これはcodereviewに属している可能性があります。 – Jacobr365

+0

私が投稿したプログラムは、最大の単語、すなわち単語 "最大"のインデックスの最初のインデックスを与えます。同じ長さを持つ "abcdefg"のインデックスを知りたいと思います。私はそのような瞬間downvotesでさらに質問を投稿することはできないと思う。 – CodeX

+0

@ Jacobr365いいえ、コードレビューには含まれません。彼らの要件をチェックしたいかもしれません。 OPは明らかにアルゴリズムをコード化するより効率的な方法を学習しようとしています(おそらくLINQに慣れていないでしょう)。あなたは彼の質問に反対する点がありますが、それは問題の間違った診断についてです。彼は新しく、彼は努力していることに注意してください。少なくとも彼はコードを投稿しました。仲良く遊びます。 –

答えて

2

は、溶液中での私の刺しです:

public static class LinqExtensions 
{ 
    public static List<int> IndicesOf(this int[] array, int item) 
    { 
     var indices = new List<int>(); 

     for (int i = 0; i < array.Length; i++) 
     { 
      if (array[i] == item) 
       indices.Add(i); 
     } 

     return indices; 
    } 
} 

あなたは、このようにそれを呼び出すことができます。

int[] someArrayFindMax = new[] { 1, 4, 45, 23, 4, 3342, 34, 3342, 4, 3342, 3342 }; 
int max = someArrayFindMax.Max(); 
List<int> indices = someArrayFindMax.IndicesOf(max); 

ここで直接最長の文字列のインデックスを見つけるための別の可能な拡張メソッドがあります:

public static List<int> LongestStringIndices(this string[] strings) 
    { 
     int longestString = -1; 
     var indices = new List<int>(); 

     for (int i = 0; i < strings.Length; i++) 
     { 
      if (strings[i].Length > longestString) 
      { 
       longestString = strings[i].Length; 
       // We're no longer interested in the indices of the 
       // strings we now know to be shorter 
       indices.Clear(); 
       indices.Add(i); 
      } 
      else if (strings[i].Length == longestString) 
      { 
       indices.Add(i); 
      } 
      // If it's less than the max length so far we ignore it 
     } 

     return indices; 
    } 
1

私はLINQを使って遊んでいましたが、それはC#のようです。ここで

はフィドルです:https://dotnetfiddle.net/NEFkqb

List<string> words = new List<string>{"aaaa","bb","cccc"}; 
List<int> lengths = words.Select(word => word.Length).ToList(); 
int max = lengths.Max(); 
List<int> maxes = new List<int>(); 
for(int i = 0; i < lengths.Count; i++) 
    if(lengths[i] == max) 
    maxes.Add(i); 
関連する問題