3

私が取り組み始めた新しいプロジェクトで、自分でC#を学び、

List<string>メソッドの 1 つは、パラメーターとして渡される型データを受け入れます。私が知りたいのは、これらのリストのうちの 2 つ、2 種類のデータ、または 2 つのグループが必要であることです

そして、この例のために、私には長所短所があると言います..女の子男の子

これらは実際には要素またはオブジェクトの2つの分離されたリストです。パラメーターとして渡す必要があり、1つのデータ型として渡す必要があります。次に、メソッド内でデータリストの分離を処理します、だから..いくつかのオブジェクトiの代わりにList、考えました(一瞬、そこにaDictionaryが適していると思いました...)

List渡す必要があるこのデータ型には、1つの要素(1つのアイテム...それぞれがa)しかありませんが

この結果を得るにはどうすればよいですか?

私はそれを説明しようとします:

List<string> classGirls = new List<string>();
List<string> classBoys = new List<string>();

ソース内の各アイテムの場合...ソースから両方をロードします

完了 List girls + List Boys に値が設定されています。One Girls And One Boys ListObjects しかないことを知っていても、それらを辞書として 1 つとして渡すにはどうすればよいでしょうか。

public bool foundAMatch( string Lookup, List<string> G , List<string> B){
{
    var firstGirl = G.ElementAt(0);
    var firstBoy = B.ElementAt(0);

    return firstGirl == Lookup && firstBoy !=Lookup ;
}

代わりに、次のようなものにする必要があります

  public bool foundAmatch(string Lookup, someDataType.... Kids)
  {
    var firstGirl = kids-girls <-- first entity in kids;
    var firstBoy = kids-boys <-- first entity in Kids; 

    return firstGirl == Lookup && firstBoy !=Lookup ;
  } 

心に留めておくべきことはほとんどありません...データのプロパティに関しては、優れたパフォーマンスが必要です...自然に望まれますが、最も重要なのは、並べ替えにループを使用し、あらゆる種類の対象として、適切/簡単に配置でき、反復に適している必要があります統計操作の。

  • 質問は、

ロジックをどのように実装しますか、それは既存のデータ型ですか...私が考えているのは?

そうでない場合、データ型を選択/作成するこのシナリオでどのようなアプローチを実装しますか?

4

2 に答える 2

3

これは、継承を使用して簡単に解決できます。

public abstract class Person
{
    public string Name { get; private set; }  // The setter is private because we only have to set this name when we create an instance

    protected Person(string name)
    {
        Name = name;
    }
}

public class Male : Person
{
    public Male(string name) : base(name)  // This constructor calls the constructor of the class it inherits and passes on the same argument
}

public class Female : Person
{
    public Female(string name) : base(name)
}

public bool IsMatch(string needle, IEnumerable<Person> haystack)
{
    var firstGirl = haystack.OfType<Female>().FirstOrDefault();
    var firstBuy = haystack.OfType<Male>().FirstOrDefault();
    return firstGirl != null &&
           firstGirl.Name == needle &&
           firstBoy != null &&
           firstBoy.Name != needle;
}

編集:

私は拡張メソッドがとても好きなので、次のようにメソッドを書きます。

public static class PersonExtensions
{
    public static bool IsMatch(this IEnumerable<Person> haystack, string needle)
    {
        // same method logic in here
    }
}

次のように使用できます。

var people = new List<Person>();
people.Add(new Male { Name = "Bob" });
people.Add(new Female { Name = "Mary" });
var isMatch = people.IsMatch("Jane");

編集2:

Personクラスのプロパティとして性別を持っている方がおそらくさらに良いでしょう:

public enum Sex
{
    Male,
    Female
}

public class Person
{
    public string Name { get; private set; }
    public Sex Gender { get; private set; }

    public Person(string name, Sex gender)
    {
        Name = name;
        Gender = gender;
    }
}

メソッドを次のように変更します。

var firstGirl = haystack.FirstOrDefault(p => p.Gender == Gender.Female);
var firstBoy = haystack.FirstOrDefault(p => p.Gender == Gender.Male);
于 2012-12-19T15:49:44.617 に答える
0

1つのコレクションを取得する最良の方法は、女の子だけでなく男の子も表すクラスを作成することです。以下の例を見つけてください。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private class Kid
        {
            public bool Gender { get; set; }
            public String Name { get; set; }
        }

        private List<Kid> kids;

        private void Form1_Load(object sender, EventArgs e)
        {
            // === Load data =================================================
            kids = new List<Kid>();
            kids.Add(new Kid { Name = "John", Gender = true });
            kids.Add(new Kid { Name = "Paul", Gender = true });
            kids.Add(new Kid { Name = "Jack", Gender = true });
            kids.Add(new Kid { Name = "Brenda", Gender = false });
            kids.Add(new Kid { Name = "Judith", Gender = false });
            kids.Add(new Kid { Name = "Sofia", Gender = false });

            Kid foundKid = foundAMatch("sofIa");
        }

        private Kid foundAMatch(string name)
        {
            var result = (from K in kids
                          where K.Name.ToLower() == name.ToLower() 
                          select K);

            if (result.Count() != 0)
                return result.First();
            else
                return null;
        }

        private Kid foundAMatch(string name, bool gender)
        {
            var result = (from K in kids
                          where K.Name.ToLower() == name.ToLower() && K.Gender == gender
                          select K);

            if (result.Count() != 0)
                return result.First();
            else
                return null;
        }

    }
}
于 2012-12-19T16:00:43.097 に答える