0

2D配列と1D配列を比較しているコードがあります。結果(両方の配列に存在する要素)を別の2D配列に保存する方法を教えてください。これが私が実際に新しい2D配列に「res」を保存したいコードです...

namespace WindowsFormsApplication1strng_cmp
{
    public partial class Form1 : Form
    {
        private static Dictionary<string, Position> BuildDict(string[,] symbols)
        {
            Dictionary<string, Position> res = new Dictionary<string, Position>();
            for (int i = 0; i < symbols.GetLength(0); i++)
            {
                for (int j = 0; j < symbols.GetLength(1); j++)
                {
                    res.Add(symbols[i, j], new Position(i, j));
                }
            }
            return res;
        }

        struct Position
        {
            public int x;
            public int y;
            public Position(int x, int y)
            {
                this.x = x;
                this.y = y;
            }
        }

        private static List<string> CompareUsingBrute(string[] text, string[,] symbols)
        {
            List<string> res = new List<string>();
            for (int x = 0; x < symbols.GetLength(0); x++)
            {
                for (int y = 0; y < symbols.GetLength(1); y++)
                {
                    for (int z = 0; z < text.Length; z++)
                    {
                        if (symbols[x, y] == text[z])
                            res.Add(text[z]);

                    }

                }
            }
            return res;

        }
        string[,] symbols = new string[,] { { "if", "else" }, { "for", "foreach" }, { "while", "do" } };
        string[] text = new string[] { "for", "int", "in", "if", "then" };
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            Dictionary<string, Position> dictionary = BuildDict(symbols);
            //   IndexElement[] index = BuildIndex(symbols);

            foreach (string s in CompareUsingBrute(text, symbols))
            {
                listBox2.Items.Add("valid");
            }


        }
    }
}
4

1 に答える 1

0

「あなたの質問から」私が理解しているのは、2つの配列を比較して共通の要素を保存しようとしているということです-

以下に出力を画像として添付しました-

class Program
{
    static void Main(string[] args)
    {
        String[] array1 = {"a","b","c","d","e","f"};
        String[,] array2 = new String[,] {{"a","b","c","d"},{"d","e","f","g"}};

        List<String> array1AsList = array1.OfType<String>().ToList();
        List<String> array2AsList = array2.OfType<String>().ToList();

        // referring from **Ed S comments below**. Instead of using OFType(...)
        // alternatively you can use the List<>().. ctor to convert an array to list
        // although not sure for 2D arrays

        var common = array1AsList.Intersect(array2AsList);

    }
}

ここに画像の説明を入力

于 2012-05-26T15:57:11.400 に答える