2

xx@yy の形式の文字列を含む文字列のリストがあります。

xx = feature name

yy = project name

基本的に、これらの文字列を @ で分割し、xx 部分を 1 つの文字列配列に格納し、yy 部分を別の文字列配列に格納して、さらに操作を行いたいと考えています。

string[] featureNames = all xx here

string[] projectNames = all yy here

C# の foreach または for ループで split メソッド (string.split('@')) を使用して文字列を分割できますが、2 つの部分を 2 つの異なる文字列配列 (必ずしも配列ではなくリスト) に別々に格納することはできません後で配列に変換できるため、機能することもあります)。

主な問題は、分割後に文字列の 2 つの部分を決定し、それらを文字列配列に別々に追加することです。

4

8 に答える 8

5

これは簡単なアプローチの 1 つです。

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]);
}

上記はxxand のリストと のリストをインスタンス化し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

主な問題は、分割後に文字列の 2 つの部分を決定し、それらを文字列配列に別々に追加することです。

なぜ異なる配列なのですか?辞書の方が適切ではないでしょうか。

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 に答える