private void button2_Click(object sender, EventArgs e)
{
    // 获取所有的符号集合
    List<string> symbols = new List<string>();
    foreach (var item in production.Keys)
    {
        if (!symbols.Contains(item))
            symbols.Add(item);
        foreach (var prod in production[item])
        {
            foreach (var c in prod)
            {
                if (!symbols.Contains(c.ToString()))
                    symbols.Add(c.ToString());
            }
        }
    }
    // 将符号集合按照终结符和非终结符分开
    nonterminals = new List<string>();
    terminals = new List<string>();
    foreach (var s in symbols)
    {
        if (char.IsUpper(s[0]))
            nonterminals.Add(s);
        else
            terminals.Add(s);
    }
    listView2.Clear();
    listView2.Columns.Add('', 30, HorizontalAlignment.Center);
    // 使用非终结符作为行标题
    ListViewItem[] items = new ListViewItem[nonterminals.Count];
    for (int i = 0; i < nonterminals.Count; i++)
    {
        items[i] = new ListViewItem(nonterminals[i]);
        // 使用终结符作为列标题
        for (int j = 0; j < terminals.Count; j++)
        {
            if (follows[nonterminals[i]].Contains(terminals[j]))
            {
                items[i].SubItems.Add('1');
            }
            else
            {
                items[i].SubItems.Add('0');
            }
        }
    }
    listView2.Items.AddRange(items);
    listView2.View = View.Details;
    listView2.GridLines = true;
    listView2.FullRowSelect = true;
}
C# ListView控件行列转换 - 显示Follow集

原文地址: https://www.cveoy.top/t/topic/fXDm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录