Как разрезать строку с помощью LINQ - PullRequest
2 голосов
/ 22 марта 2012

У меня есть строка, которую нужно нарезать. Я хотел бы сделать это в LINQ. Строка может содержать до 32 букв. Я хотел бы собрать части в словаре.

The 1st part needs to have the first 4 letters. 
The 2nd part needs to have the first 5 letters. 
The 3rd part needs to have the first 6 letters. 
etc.

Ключ словаря - просто счетчик. Я не знаю длину строки, мин. длина 4. Как бы я сделал это творчески в LINQ?

Ответы [ 3 ]

4 голосов
/ 22 марта 2012

Я не знаю, правильно ли я понял, что вы хотите сделать, но, возможно, вы ищете что-то вроде этого:

using System;
using System.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var s = "This is a simple string";
            var dic = Enumerable.Range(4, s.Length-3)
                                .Select((m, i) => new { Key = i, Value = s.Substring(0, m) })
                                .ToDictionary(a=>a.Key,a=>a.Value);
        }
    }
}
1 голос
/ 22 марта 2012

Вы можете сделать это расширением:

public static Dictionary<int, String> Chop(this string str, int minLength)
{
    if (str == null) throw new ArgumentException("str");
    if (str.Length < minLength) throw new ArgumentException("Length of string less than minLength", "minLength");
    var dict = str.TakeWhile((c, index) => index <= str.Length - minLength)
        .Select((c, index) => new { 
            Index = index, 
            Value = str.Substring(0, minLength + index) 
        }).ToDictionary(obj => obj.Index, obj => obj.Value);

    return dict;
}

Назовите это так:

Dictionary<int, String> = "Insert sample string here".Chop(4);
0 голосов
/ 22 марта 2012
string word = "abcdefghijklmnopqrstuvwz";

var dict = new Dictionary<int, string>();
for(int i = 0; i < 28;i++)
{
   dict[i] = new string(word.Take(i + 4).ToArray());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...