2

我有一个字符串列表,其中包含以下格式的字符串:xx@yy

xx = feature name

yy = project name

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

string[] featureNames = all xx here

string[] projectNames = all yy here

我可以在 C# 中的 foreach 或 for 循环中使用 split 方法 (string.split('@')) 拆分字符串,但我不能将两个部分分别存储在两个不同的字符串数组中(不一定是数组,而是列表也可以工作,因为稍后可以将其转换为数组)。

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

4

8 回答 8

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,循环遍历字符串列表,并为每个字符串拆分它。然后它将拆分的结果添加到先前实例化的列表中。

于 2012-10-08T09:07:11.300 回答
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());
于 2012-10-08T09:06:09.730 回答
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]);
}
于 2012-10-08T09:07:19.957 回答
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.
于 2012-10-08T09:08:22.837 回答
2

怎么样

List<string> lst = ... // your list containging xx@yy

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();
于 2012-10-08T09:08:47.030 回答
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
于 2012-10-08T09:07:30.013 回答
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);
}
于 2012-10-08T09:08:12.353 回答
1

试试这个。

var ls = new List<string>();
ls.Add("123@project");
ls.Add("123@project1");

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();
于 2012-10-08T09:09:16.360 回答