如何将长字符串拆分为固定数组项

dno*_*oxs 0 c# algorithm

我有一个字典对象IDictionary<string, string>,它只有以下项目:Item1,Items2和Item3.每个项目的最大长度为50个字符.

然后我有一个单词列表List<string>.我需要一个循环来遍历单词并将它们添加到从Item1开始的字典中,但在将它添加到字典之前需要检查长度.如果新项目和当前项目的长度加在一起大于50个字符,则该单词需要向下移动到下一行(在本例中为Item2).

做这个的最好方式是什么?

Jim*_*mmy 6

我不确定为什么这个问题被投票如此之多,但也许原因是你已经有了一个非常清晰的算法,所以获得C#代码应该是微不足道的.就目前而言,无论是你真的缺乏经验还是非常懒惰.我要承担前者.

无论如何,让我们来看看要求.

1)"然后我有一个单词列表列表." 你已经以某种形式拥有这条线.

List<string> words = GetListOfWords(); 
Run Code Online (Sandbox Code Playgroud)

2)"通过单词并将它们添加到从Item1开始的字典" - 如果你想要一系列字符串,我建议使用List而不是字典.此外,您需要一个临时变量来存储当前行的内容,因为您确实是在一次添加完整行之后.

var lines = new List<string>();   
string currentLine = "";
Run Code Online (Sandbox Code Playgroud)

3)"我需要一个循环,将通过单词"

foreach(var word in words) {
Run Code Online (Sandbox Code Playgroud)

4)"如果新项目和当前项目的长度加在一起大于50个字符" - 空格+1.

    if (currentLine.Length + word.Length + 1 > 50) {
Run Code Online (Sandbox Code Playgroud)

5)"那么这个词需要向下移动到下一行"

        lines.Add(currentLine);
        currentLine = word;    
    }
Run Code Online (Sandbox Code Playgroud)

6)"通过单词并将它们添加到从Item1开始的字典" - 你没有非常清楚地说出这一点.你的意思是你想把每个单词加到最后一行,除非它会使这行超过50个字符.

    else {
        currentLine += " " + word;   
    }
}
lines.Add(currentLine); // the last unfinished line
Run Code Online (Sandbox Code Playgroud)

然后你去


如果你绝对需要它作为3行的IDictionary,那就行了

var dict = new Dictionary<string,string>();
for(int lineNum = 0; lineNum < 3; lineNum ++)
    dict["Address"+lineNum] = lineNume < lines.Length ? lines[lineNum] : "";
Run Code Online (Sandbox Code Playgroud)