2

長さに応じて単語の文字列を配列にグループ化することは可能ですか? 次のコードを試していますが、うまくいきません。ありがとうございました。

string [] groups =
      from word in words.split(' ')
      orderby word ascending
      group word by word.Length into lengthGroups
      orderby lengthGroups.Key descending
      select new { Length = lengthGroups.Key, Words = lengthGroups };
4

2 に答える 2

3

クエリは匿名型のリストを返すため、次のvarキーワードを使用する必要があります。

var sentence = "Here are a few words in a sentence";
var words = sentence.Split(' ');

var groups =
  from word in words
  orderby word ascending
  group word by word.Length into lengthGroups
  orderby lengthGroups.Key descending
  select new { Length = lengthGroups.Key, Words = lengthGroups };

// Test the results
foreach (var lengthGroup in groups)
{
    Console.WriteLine(lengthGroup.Length);

    foreach(var word in lengthGroup.Words)
    {
        Console.WriteLine(word);
    }
}

動的を使用することもできますIEnumerable:

IEnumerable<dynamic> groups =
  from word in words
  orderby word ascending
  group word by word.Length into lengthGroups
  orderby lengthGroups.Key descending
  select new { Length = lengthGroups.Key, Words = lengthGroups };

結果は文字列のリストではないため、匿名型のリストであるため、文字列の配列にキャストすることはできません。必要に応じて、動的型の配列にキャストできます。

dynamic[] myArray = groups.ToArray();
于 2012-07-07T17:37:40.750 に答える
2
//string[] words = new string[] { "as", "asdf", "asdf", "asdfsafasd" };
//string[] words = "as asdf asdf asdfsafasd".Split(' ');

var groups = "as asdf asdf asdfsafasd".Split(' ').GroupBy(x => x.Length);

foreach (var lengthgroup in groups)
{
    foreach (var word in lengthgroup)
    {
        Console.WriteLine(word.Length + " : " + word);
    }
}
于 2012-07-07T17:54:15.403 に答える