C # добавление значения / индекса к элементам в массиве и отслеживание в консоли, как часто они нажимаются - PullRequest
0 голосов
/ 24 ноября 2018

Для задания я застрял на этой части.Я как новичок, начинающий программист может быть.

Итак, у меня есть массив, прикрепленный к списку.Это объявление массива:

        number = new decimal[5];
        number[0] = 0.10m;
        number[1] = 0.20m;
        number[2] = 0.30m;
        number[3] = 0.40m;  
        number[4] = 0.50m;

И вот как я прикрепил массив к списку

        lstNumbers.Items.Add(number[0]);
        lstNumbers.Items.Add(number[1]);
        lstNumbers.Items.Add(number[2]);
        lstNumbers.Items.Add(number[3]);
        lstNumbers.Items.Add(number[4]);

Поскольку это список, эти элементы (/ значения?) Будутнажать на.Мне нужно дать каждому номеру свой индекс.Число [0] равно 0,10, поэтому индекс должен быть 010. Как мне это сделать?

Другая проблема, с которой я сталкиваюсь, заключается в следующем: каждый раз, когда вы нажимаете на любой из этих элементов, он отслеживается вмассив и в консоли.Например, если вы нажмете 0,10 один раз, это появится в консоли: «0,10, 1 раз».Нажмите 3 раза, консоль должна сказать: «0,10, 1 раз. 0,10, 2 раза. 0,10, 3 раза.»

Мне сказали, что ассоциативный массив может помочь, но я не уверен, как это должно выглядетьлайк.Пробовал искать его, но в основном это для PHP, а немногие для C # слишком сложны.

Надеюсь, что кто-нибудь сможет мне немного помочь.

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Спасибо за помощь, я все ближе к выполнению своего задания.Хорошо, потому что сегодня полночь.

У меня есть (надеюсь, последний) вопрос.

Итак, я получил два списка прямо сейчас.ListBox 1 имеет прикрепленный enum.В этом перечислении находятся элементы, которые имеют значение (различное для каждого элемента).У нас также есть второй список, в котором появляются эти числа. Что я пытаюсь выяснить:

Item1 из Listbox1 имеет значение 1,70.Если вы нажмете 0.50 в Listbox2 4 раза, то общее значение должно быть 2.00.Когда значение чисел равно или больше значения Listbox1, в метке появится сообщение, и если вы перешли к значению Listbox1, то также будет указано, сколько других чисел (в данном случае 10,10 и 1 из 0,20).

PS: Эти цифры на самом деле являются монетами, и я пытаюсь закодировать машину для раздачи (так что предметы - это еда / напитки), но я немного изменил материал, чтобыубедитесь, что я могу учиться на основе приведенных ответов.

0 голосов
/ 24 ноября 2018

ОК, давайте начнем с первого.Если вы используете форму окна, вы можете настроить вывод проекта на консоль вместе с формой окна.

Это достигается с помощью:

Щелкните правой кнопкой мыши свой проект -> Выбрать свойства. Измените тип вывода на Консольное приложение.

enter image description here

Как получить массив, который использует строку в качестве индекса?Просто используйте словарь.

       Dictionary<string, decimal> number = new Dictionary<string, decimal>();

        number["010"] = 0.10m;
        number["020"] = 0.20m;
        number["030"] = 0.30m;
        number["040"] = 0.40m;
        number["050"] = 0.50m;

        this.myListBox.Items.Add(number["010"]);
        this.myListBox.Items.Add(number["020"]);
        this.myListBox.Items.Add(number["030"]);
        this.myListBox.Items.Add(number["040"]);
        this.myListBox.Items.Add(number["050"]);

Последний пункт очень прост.Присоедините событие SelectIndexChanged к вашему списку и следите за выбранным элементом:

    private void myListBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        var item = this.myListBox.SelectedItem.ToString();
        if(!tracking.Select(x=> x.Key == item).Any())
        {
            tracking.Add(new KeyValuePair<string, int>(item, 1));
            Console.WriteLine(item + " has been selected once");
        }
        else
        {
            var currentItem = tracking.SingleOrDefault(x => x.Key == item);
            var value = currentItem.Value;
            tracking.Remove(currentItem);
            value++;
            tracking.Add(new KeyValuePair<string, int>(item, value));
            Console.Clear();
            Console.WriteLine(item + " has been selected " + value + " times");
        }
    }

Переменная отслеживания была объявлена ​​следующим образом:

public partial class Form1 : Form
{
    List<KeyValuePair<string, int>> tracking = new List<KeyValuePair<string, int>>();
    public Form1()
    {
        InitializeComponent();

        Dictionary<string, decimal> number = new Dictionary<string, decimal>();

        number["010"] = 0.10m;
        number["020"] = 0.20m;

EDIT

Поскольку словарь не может быть использован, а приложение - WPF, вот еще одно решение.

Опять же, вы можете использовать первый шаг, показанный для получения решения WPF с выводом консоли: щелкните правой кнопкой мыши ваш проект-> Выберите Свойства. Измените тип вывода на Консольное приложение.

Чтобы иметь коллекцию, которая использует объект в качестве индекса, нужно использовать Hashtable.

Вот ваш основной:

public partial class MainWindow : Window
{
    List<KeyValuePair<string, int>> tracking = new List<KeyValuePair<string, int>>();
    public MainWindow()
    {
        InitializeComponent();

        Hashtable numbers = new Hashtable();

        numbers.Add("010", 0.10m);
        numbers.Add("020", 0.20m);
        numbers.Add("030", 0.30m);
        numbers.Add("040", 0.40m);
        numbers.Add("050", 0.50m);

        List<decimal> items = new List<decimal>();
        items.Add(Convert.ToDecimal(numbers["010"]));
        items.Add(Convert.ToDecimal(numbers["020"]));
        items.Add(Convert.ToDecimal(numbers["030"]));
        items.Add(Convert.ToDecimal(numbers["040"]));
        items.Add(Convert.ToDecimal(numbers["050"]));

        lbTodoList.ItemsSource = items;
    }

    private void lbTodoList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var item = this.lbTodoList.SelectedItem.ToString();
        if (!tracking.Select(x => x.Key == item).Any())
        {
            tracking.Add(new KeyValuePair<string, int>(item, 1));
            Console.WriteLine(item + " has been selected once");
        }
        else
        {
            var currentItem = tracking.SingleOrDefault(x => x.Key == item);
            var value = currentItem.Value;
            tracking.Remove(currentItem);
            value++;
            tracking.Add(new KeyValuePair<string, int>(item, value));
            Console.Clear();
            Console.WriteLine(item + " has been selected " + value + " times");
        }
    }
}

Ваш XAML должен быть таким простым:

<Grid>
    <ListBox  Name="lbTodoList" HorizontalAlignment="Left" Height="154" Margin="145,56,0,0" VerticalAlignment="Top" Width="277" SelectionChanged="lbTodoList_SelectionChanged"/>
</Grid>

Запомните, чтобы прикрепить событие SelectIndexChanged к вашему списку и отслеживать выбранный элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...