0

文字列があるとしましょうvar s = "123456789"

どこ

foreach(var c in DivideStr(s, 3)){
  Console.WriteLine(c);
}

印刷します123、、456789

これは、loopおよびifステートメントで実行するのはかなり簡単な問題です。Takeしかし、私は次のようにC#で達成して機能したいと思ってSkipいます

IEnumerable DivideStr(String s, Int n) 
{
   var a = s;  
   while(!a.IsEmpty())  
   {  
     yield return a.Take(n)  
     a = a.Drop(3) // or a.Skip(n)  
   }  
}

このように、私が持っている場合、プリントvar s = "12345678" アウトは123、、、45678

問題は、上記のコードがコンパイルされないことです。私は何が欠けていますか?

4

2 に答える 2

2

である場合、これは 、 、そして をs生成します。"12345678"12345678

    public static IEnumerable<string> DivideStr(String s, int n)
    {
        for (int currentPos = 0; currentPos < s.Length; currentPos += n)
        {
            yield return new string(s.Skip(currentPos).Take(n).ToArray());
        }
    }

Skipこのようにandを使用Takeすることはあまり実用的な意味を持ちませんが、s.Substring(...)列挙子のオーバーヘッドなしで -s を生成することもできるからです。

于 2012-05-02T20:58:10.403 に答える
1

このようなものを試してください

IEnumerable<string> splitstrings = Enumerable.Range(0, str.Length / 3)
        .Select(i => str.Substring(i * 3, 3));

またはこれ

List<string> splitstrings = (from Match m in Regex.Matches(str, @"\d{1,3}")
                   select m.Value).ToList();
于 2012-05-02T22:19:07.313 に答える