Передать массив функции (и использовать функцию для разделения массива) - PullRequest
1 голос
/ 01 мая 2011

Я хочу передать строковый массив (разделенный запятыми), затем использовать функцию для разделения переданного массива запятой и добавить разделитель вместо запятой.

Я покажу вам, что я имею в виду более подробно с неработающим кодом:

String FirstData = "1";
String SecondData = "2" ;
String ThirdData = "3" ;
String FourthData = null;

FourthData = AddDelimiter(FirstData,SecondData,ThirdData);

public String AddDelimiter(String[] sData)        
{
    // foreach ","
    String OriginalData = null;

    // So, here ... I want to somehow split 'sData' by a ",". 
    // I know I can use the split function - which I'm having 
    // some trouble with - but I also believe there is some way
    // to use the 'foreach' function? I wish i could put together 
    // some more code here but I'm a VB6 guy, and the syntax here 
    // is killing me. Errors everywhere.

    return OriginalData;

}

Ответы [ 5 ]

2 голосов
/ 01 мая 2011

Синтаксис здесь не имеет большого значения, вам нужно познакомиться с библиотекой базовых классов. Кроме того, вы, очевидно, хотите объединить строки, а не разбивать их:

var s = string.Join(",", arrayOFStrings);

Кроме того, если вы хотите передать n строку такому методу, вам нужно ключевое слово params:

public string Join( params string[] data) {
  return string.Join(",", data);
}
1 голос
/ 01 мая 2011

Чтобы разделить:

string[] splitString = sData.Split(new char[] {','});

Чтобы присоединиться к новому разделителю, передайте массив строк в String.Join:

string colonString = String.Join(":", splitString);

Я думаю, вам лучше использовать Replace, так как все, что вы хотите сделать, это заменить один разделитель другим:

string differentDelimiter = sData.Replace(",", ":");
0 голосов
/ 01 мая 2011

Если у вас есть несколько объектов и вы хотите поместить их в массив, вы можете написать:

string[] allData = new string[] { FirstData, SecondData, ThirdData };

Вы можете просто дать это функции:

FourthData = AddDelimiter(allData);

C # имеет хороший трюк, если вы добавите ключевое слово params в определение функции, вы можете рассматривать его как функцию с любым количеством параметров:

public String AddDelimiter(params String[] sData) { … }
…
FourthData = AddDelimiter(FirstData, SecondData, ThirdData);

Что касается фактической реализации, самый простой способ - использовать string.Join():

public String AddDelimiter(String[] sData)        
{
    // you can use any other string instead of ":"
    return string.Join(":", sData); 
}

Но если вы хотите построить результат самостоятельно (например, если вы хотите узнать, как это сделать), вы можете сделать это с помощью конкатенации строк (oneString + anotherString) или, что еще лучше, с помощью StringBuilder

public String AddDelimiter(String[] sData)        
{
    StringBuilder result = new StringBuilder();
    bool first = true;

    foreach (string s in sData)
    {
        if (!first)
            result.Append(':');
        result.Append(s);
        first = false;
    }

    return result.ToString();
}
0 голосов
/ 01 мая 2011

Если вам не нужно выполнять какую-либо обработку промежуточных частей и просто нужно заменить разделитель, вы можете легко сделать это с помощью метода Replace в классе String :

string newlyDelimited = oldString.Replace(',', ':');

Для больших строк это даст вам лучшую производительность, так как вам не придется делать полный проход через строку, чтобы разбить ее на части, а затем делать проход через части, чтобы соединить их вместе.

Однако, если вам нужно работать с отдельными частями (чтобы перекомпоновать их в другую форму, которая не похожа на простую замену разделителя), вы должны использовать метод Split в String класс , чтобы получить массив элементов с разделителями, а затем подключить их к желаемому формату.

Конечно, это означает, что вы должны иметь какое-то явное знание о том, что означает каждая часть строки с разделителями.

0 голосов
/ 01 мая 2011

Одна версия функции Split принимает массив символов.Вот пример:

   string splitstuff = string.Split(sData[0],new char [] {','});
...