3

LINQ を使い始めたばかりで、いくつか問題があります。

次のようなことをしたいとします。

IEnumerable<String[]> = from s in listOfStrings
                      where () => {
                          int sum = 0;
                          for (int i=0; i<s.Length(); i++)
                          {
                              sum += s[i];
                          }
                          return sum < 50;
                      }
                      select () =>
                      {
                          String[] t = new String[s.Length()];
                          for (int i=0; i<s.Length(); i++)
                          {
                              t[i] = s[i].toString();
                          }
                          return t;
                      }

listOfStrings基本的に、合計が50未満の文字列から文字列値として文字の配列を取得したいと考えています。

これは単なる例ですが、これ以上役に立たない関数を考えるのは難しいでしょう。新しい関数を作成せずに、linq 内でラムダ関数を実行する方法を見つけようとしています。

ありがとう!

4

4 に答える 4

2

クエリ構文 (つまりlistOfStrings.Where(...)) の代わりにメソッドチェーン構文を使用する場合は、そこにラムダを貼り付けることができます。

于 2012-07-02T06:47:23.903 に答える
1

私はそれをコンパイルしていないので、コードのバグかもしれませんが、概念はそこにあります:

var result = listOfStrings.Where(y => y.Split().Aggregate(0, (y, x) => int.Parse(y)) < 50).Select(y => y.Split());
于 2012-07-02T07:11:38.793 に答える
1

この場合、ラムダ関数を使用する方がおそらく簡単です...

var listOfStrings = new List<string>() { "foo", "bar" };
IEnumerable<string[]> result = 

    // restrict to strings where the sum of ASCII values is < 1000
    listOfStrings.Where(item => item.Sum(ch => (int)ch) < 1000)

    // select each as an array of strings
    .Select(item => item.Select(ch => ch.ToString()).ToArray());

// result:  { { "f", "o", "o" }, { "b", "a", "r" } }
于 2012-07-02T06:45:42.893 に答える
-1

多分:

listOfString.Where(s => s.Length < 50).ToArray();
于 2012-07-02T06:50:10.237 に答える