Loading...
RoYaL avatar RoYaL Trainer 6849 Точки
Best Answer

А какви очакваш да са стойностите? Дай примерен изход на масива, който очакваш да излезе

[0,0,0] = 15,

[0,1,0] = 25,

и т.н.?

Дай с малко числа, за да стане ясно?

0
simeon10 avatar simeon10 218 Точки

Всички елементи са стрингове. Ето част от текстовия файл:

USA
Tier 1
F2A-1 Buffalo.png
F2A-3 Buffalo.png
OS2U-1 Kingfisher.png
OS2U-3 Kingfisher.png
P-26A-33 Peashooter.png
P-26A-34 M2 Peashooter.png
P-26A-34 Peashooter.png
P-26B-35 Peashooter.png
P-36A Hawk.png
P-36C Hawk.png
P-36G Hawk.png
PBY-5 Catalina.png
PBY-5a Catalina.png
Rasmussen's P-36A Hawk.png
SBD-3 Dauntless.png
Tier 2
A-20G-25 Havoc.png
A-36 Apache.png

...

Всеки път като срещне име на държава, както в случая USA, x трябва да се увеличи с 1, а всеки път като срещне
Tier N, y се увеличава с 1. Всеки друг ред, който е различен от име на държава и Tier N, трябва да се запише в третото измерение. В този случай между Tier 1 и Tier 2 имаме 15 реда, но между 2 и 3 може да са 25/5/20 или каквото и да било друго число.

0
RoYaL avatar RoYaL Trainer 6849 Точки

Разбрах те:

n["USA", "Tier1"] = ["f2a-1", "f2a-3", ...]

n["USA", Tier"2"] = ["...", "...", ...]

n["Canada", "Tier1"] = [ ... ]

Нали така? Където Канада и УСА са х, а Тайърите у (числа)

Защо не направиш двумерен масив от листове от стрингове? При положение, че не знаеш колко неща ще имаш в Tier-ите, масив е най-неподходящата структура. Единият вариант е първо да обиклоиш файла за да видиш колко ще ти е голямо третото измерение всеки път, което е крайно неефективно. Другия варинат е да ползваш структура от данни, която позволява нефиксиран брой елементи.

Нещо такова:

            List<string>[][] x = new List<string>[10][];

            //USA
            x[0] = new List<string>[2];

            //USA tier1
            x[0][0] = new List<string>();
            x[0][0].Add("f2a-1");
            x[0][0].Add("f2a-3");

            //USA tier2
            x[0][1] = new List<string>();
            x[0][1].Add("smth-else");

            //Canada
            x[1] = new List<string>[1];

            //Canada tier1
            x[1][0] = new List<string>();
            x[1][0].Add("smth-for-tier1-canada");

Въпреки, че ми се струва, че твоята структура най-добре отговаря на речник

dicitonary["USA"] =>

      ["Tier1"] => [....],

     ["Tier2"] => [ ... ],

което е Dictionary<string, Dictionary<string, List<string>>>

1
simeon10 avatar simeon10 218 Точки
List&lt;string&gt; lines = new List&lt;string&gt;();
            string[,,] allAir = new string[5, 5, 35];
            List &lt;string&gt; resultArr = new List&lt;string&gt;();
            int x = -1, y = -1, z = 0;
            cbArrCountry = new CheckBox[] { chboxAmerica, chboxGermany, chboxUssr, chboxBritain, chboxJapan };
            cbArrTier = new CheckBox[] { chboxTier1, chboxTier2, chboxTier3, chboxTier4, chboxTier5 };

            try
            {
                using (StreamReader sr = new StreamReader("Aviation.txt"))
                {
                    String line;

                    while ((line = sr.ReadLine()) != null)
                    {
                        lines.Add(line);
                    }
                }
            }
            catch (Exception o)
            {
                lblResult.Content = "Weird error has occured. Send this message to the author -&gt; " + o.Message;
            }
            foreach (string line in lines)
            {
                if (line.Equals("USA") || line.Equals("Germany") || line.Equals("USSR") || line.Equals("Britain") || line.Equals("Japan"))
                {
                    x++;
                    y = -1;
                    continue;
                }
                else if (line.Contains("Tier 1") || line.Contains("Tier 2") || line.Contains("Tier 3") || line.Contains("Tier 4") || line.Contains("Tier 5"))
                {
                    y++;
                    z = 0;
                }
                else
                {
                    allAir[x, y, z] = line;
                    z++;
                }
            }

            for (int i = 0; i &lt; 5; i++)
            {
                for (int j = 0; j &lt; 5; j++)
                {
                    for (int k = 0; k &lt; 35; k++)
                    {
                        if(cbArrCountry[i].IsChecked.HasValue &amp;&amp; cbArrCountry[i].IsChecked.Value == true &amp;&amp; cbArrCountry[i].IsEnabled == true)
                        {
                            if (cbArrTier[j].IsChecked.HasValue &amp;&amp; cbArrTier[j].IsChecked.Value == true &amp;&amp; cbArrTier[i].IsEnabled == true)
                            {
                                if(allAir[i, j, k] != null)
                                {
                                    resultArr.Add(allAir[i, j, k]);
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                        else
                        {
                            break;
                        }
                    }
                }
            }
            if(resultArr.Count != 0)
            {
                Random rand = new Random();
                int randNum = (int)rand.Next(0, resultArr.Count);

                var uri = new Uri("pack://application:,,,/Images/" + resultArr[randNum]);
                imgResult.Source = new BitmapImage(uri);
                int fileExtPos = resultArr[randNum].LastIndexOf(".");

                if (fileExtPos &gt;= 0)
                {
                    resultArr[randNum] = resultArr[randNum].Substring(0, fileExtPos);
                }
                lblResult.Content = resultArr[randNum];
            }
            else
            {
                MessageBox.Show("Please choose at least one country and tier");
            }

В момента кода представлява това и работи без грешка, но следобяд, като имам малко време ще го преработя с List<>, защото наистина е много по-ефективно, и нямам идея защо не се сетих сам. Мерси много. :)

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.