2012-10-08 49 views
1

添加(拆分方法的结果)的字符串分成两个单独的阵列我有字符串的列表,其包括在格式字符串:XX @ YY创建在C#动态字符串数组,并通过循环

xx = feature name 

yy = project name 

基本上,我想在@处分割这些字符串,并将xx部分存储在一个字符串数组中,并将yy部分存储在另一个字符串数组中以执行进一步的操作。

string[] featureNames = all xx here 

string[] projectNames = all yy here 

我能够分裂在foreach或在C#循环使用分割法(string.split(“@”))的字符串,但我不能在两个不同的字符串数组分别存储两个部分(不一定是数组,但是列表也可以,因为之后可以将其转换为数组)。

主要问题是确定分割后的字符串的两个部分,然后将它们分别附加到字符串数组。

+1

请显示您的当前代码。 – CodeCaster

+0

这些对如何分隔? – Jodrell

+2

为什么选择投票的问题。新手不能要求什么,尽管目前看起来很愚蠢。 每个人都有一个学习的阶段,他们遇到了这样的问题。如果是这样,至少给理由投票的问题。伤心有些人这样做。 – Indigo

回答

5

这是一个简单的方法:

var xx = new List<string>(); 
var yy = new List<string>(); 
foreach(var line in listOfStrings) 
{ 
    var split = string.split('@'); 
    xx.Add(split[0]); 
    yy.Add(split[1]); 
} 

以上实例的xx和列表和yy列表,遍历字符串列表和为每一个分裂它。然后它将分割的结果添加到先前实例化的列表中。

3

如何如下:

List<String> xx = new List<String>(); 
List<String> yy = new List<String>(); 
var strings = yourstring.Split('@'); 

xx.Add(strings.First()); 
yy.Add(strings.Last()); 
+0

几乎,尽管有一个_list_的字符串要分割,而不仅仅是一个。 – Oded

2
var featureNames = new List<string>(); 
var productNames = new List<string>(); 
foreach (var productFeature in productFeatures) 
{ 
    var parts = productFeature.Split('@'); 

    featureNames.Add(parts[0]); 
    productNames.Add(parts[1]); 
} 
1
var all_XX = yourArrayOfStrings.Select(str => str.split('\@')[0]); // this will be IENumerable 
var all_YY = yourArrayOfStrings.Select(str => str.split('\@')[1]); // the same fot YY. But here make sure that element at [1] exists 
1

的主要问题是确定分割后的字符串的两个部分,然后将它们分别附加到字符串数组。

为什么不同的数组?字典不会更合适吗?

List<String> input = File.ReadAllLines().ToList<String>(); // or whatever 
var output = new Dictionary<String, String>(); 

foreach (String line in input) 
{ 
    var parts = input.Split('@'); 

    output.Add(parts[0], parts[1]); 
} 

foreach (var feature in output) 
{ 
    Console.WriteLine("{0}: {1}", feature.Key, feature.Value); 
} 
+0

是的,但我需要在以后的不同情况下使用xx和yy。我不确定所有这些工作是如何实现的,尽可能简单以避免复杂的编码。非常感谢。通过所有这些想法,我正在学习许多新事物。 – Indigo

+0

@Chetan你总是可以遍历字典的['Keys'](http://msdn.microsoft.com/en-us/library/bb337739.aspx)属性来检索所有的键(这实际上包含与你的featureNames数组相同)。此外,使用字典,您只需将一个变量传递给其他函数而不是两个数组。 – CodeCaster

+0

是的,正确的,明白了。查看更多关于Dictionary的信息。再次感谢。这真的很有帮助。 – Indigo

2

你可以做这样的事情:

var splits = input.Select(v => v.Split('@')); 

var features = splits.Select(s => s[0]).ToList(); 
var projects = splits.Select(s => s[1]).ToList(); 

如果你不介意稍微代码,但更好的性能和更低的压力,垃圾收集器则:

var features = new List<string>(); 
var projects = new List<string>(); 

foreach (var split in input.Select(v => v.Split('@'))) 
{ 
    features.Add(split[0]); 
    projects.Add(split[1]); 
} 

但总体我建议创建类并解析你的输入(更多C#风格的方法):

public class ProjectFeature 
{ 
    public readonly string Project; 
    public readonly string Feature; 

    public ProjectFeature(string project, string feature) 
    { 
     this.Project = project; 
     this.Feature = feature; 
    } 

    public static IEnumerable<ProjectFeature> ParseList(IEnumerable<string> input) 
    { 
     return input.Select(v => 
     { 
      var split = v.Split('@'); 
      return new ProjectFeature(split[1], split[0]); 
     } 
    } 
} 

,并在以后使用它(只是可能使用的例子):

var projectFeatures = ProjectFeature.ParseList(File.ReadAllLines(@"c:\features.txt")).ToList(); 
var features = projectFeatures.Select(f => f.Feature).ToList(); 
var projects = projectFeatures.Select(f => f.Project).ToList(); 
// ??? etc. 
+0

是啊。这个看起来不错 –

+0

完美,这正是我在这里做的。我在我的Windows窗体应用程序中有一个树视图。最后,我将检查节点作为这个xx @ yy名称。我正在编写一个单独的类,我可以将该列表作为输入,然后使用功能和项目名称从数据库中检索所需的数据,然后将它们添加到XML或Excel甚至是文本文件,无论最终用户的格式如何选择输出。非常感谢。我想这需要一些时间来学习这些技巧,但我现在也有足够的动力。 – Indigo

2

如何

List<string> lst = ... // your list containging [email protected] 

List<string> _featureNames = new List<string>(); 

List<string> _projectNames = new List<string>(); 

lst.ForEach(x => 
{ 
    string[] str = x.Split('@'); 
    _featureNames.Add(str[0]); 
    _projectNames.Add(str[1]); 
} 

string[] featureNames = _featureNames.ToArray(); 

string[] projectNames = _projectNames.ToArray(); 
1

试试这个。

var ls = new List<string>(); 
ls.Add("[email protected]"); 
ls.Add("[email protected]"); 

var f = from c in ls 
select new 
{ 
    XX = c.Split("@")[0], 
    YY = c.Split("@")[1] 
}; 

string [] xx = f.Select (x => x.XX).ToArray(); 
string [] yy = f.Select (x => x.YY).ToArray();