如何有效地编辑C#字符串数组中的数据

时间:2019-04-24 17:52:27

标签: c#

我正在开发一个简单的程序来编辑字符串数组中的数据,并且在过去的几个晚上一直在努力工作。我是C#的新手,非常感谢您的帮助。

我想将字符串数组编辑成类似以下内容(理论上):

[Section]
Key: Data
Key2: Data
Key3: Data

如果未找到该节,则应创建该节(以及包含传递给该方法的键和数据的另一行)。如果找到它,则应检查它,直到下一部分(或文件末尾)为止。如果在本节中未找到密钥,则应在本节末尾创建它。如果找到,则应编辑密钥的数据。

做到这一点的最佳方法是什么?我已经尝试了一些超级hacky代码,并且总是遇到类似这样的问题:

[Section]
Key3: System.String[]

很抱歉,如果这不是最好的问题。正如我所说的,我对C#来说还比较陌生,可以真正使用该帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

“在字符串数组中编辑数据”

string[] myArray = { "one", "two", "three" };

myArray[1] = "nottwo";

第二个值(myArray[1]已从two更改为nottwo

现在更深入地描述您的问题...

您已经提到了键和值,为此,您很可能希望研究Dictionary<TKey,TValue> Class。请参见参考:https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2?view=netframework-4.8

示例:

Dictionary<int, string> myDictionary = new Dictionary<string, string>();
myDictionary.Add("one", "Hello");
myDictionary.Add("two", "World");
myDictionary.Add("three", "This is");
myDictionary.Add("sandwich", "a Dictionary.");

Console.Writeline(myDictionary["one"]);
Console.Writeline(myDictionary["two"]);
Console.Writeline(myDictionary["three"]);
Console.Writeline(myDictionary["sandwich"]);

答案 1 :(得分:0)

我找到了一些适用于我的用例的代码。

public static string[] SetData(string section, string key, string value, string[] data)
        {

            var updatedData = data;
            int sectionIndex = Array.IndexOf(data, "[" + section + "]");

            if(sectionIndex > -1)
            {
                //section found
                for(int i = sectionIndex; i < data.Length; i++)
                {
                    if (data[i].StartsWith(key))
                    {
                        //key found
                        string newData = data[i];
                        string tempString = newData.Remove(newData.LastIndexOf(":"));
                        updatedData[i] = tempString + ": " + value;
                        break;     
                    }
                    else if (data[i].StartsWith("[") && !data[i].Contains(section))
                    {
                        //key not found, end of section reached.
                        List<string> temp = data.ToList();
                        temp.Insert(i, key + ": " + value);
                        updatedData = temp.ToArray();
                        break;                
                    }
                    else if (i == data.Length - 1) //-1?
                    {
                        //key not found, end of file reached.
                        List<string> temp = data.ToList();
                        temp.Insert(i, key + ": " + value);
                        updatedData = temp.ToArray();
                        break; 
                    }
                }
                return updatedData;
            }
            else
            {
                //section not found
                updatedData = new string[data.Length + 2];

                for (int i = 0; i < data.Length; i++)
                {
                    updatedData[i] = data[i];
                }

                updatedData[updatedData.Length - 2] = "[" + section + "]";
                updatedData[updatedData.Length - 1] = key + ": " + value;
                return updatedData;
            }

        }