none
c# referans filter RRS feed

  • Soru

  • Merhaba,

    Başlangıç seviyesindeyim, basitçe bir sorum var.

    Aşağıdaki kodda Numbers,Names,Code arrayleri içine sadece filtreleme yapıp

    Numaralar[i] = 100; olan değerlerini ve karşılık gelen isimler[i] ve kod[i] değerlerini almak istiyorum. SimpleMethod fonksiyonunu değiştirmem mümkün değil.

    Almak istediğim değerler

    Numbers[0]=100;Names[0]="z";Code[0]=12;

    Numbers[1]=100;Names[1]="a";Code[1]=15;

    Numbers[2]=100;Names[2]="d";Code[2]=13;

    Numbers[3]=100;Names[3]="g";Code[3]=14;

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace GetSet2
    {
        class Program
            {
            public static void Main()
            {
                int[] Numbers = new int[12];
                string[] Names = new string[12];
                int[] Code = new int[12];
                SimpleMethod(ref Numbers,ref Names,ref Code);

                for (int i = 0; i < Numbers.Length; i++)
                {
                    Console.WriteLine(Numbers[i]);
                }

                Console.ReadLine();
            }
            public static void SimpleMethod(ref int[] Numaralar,ref string[] isimler,ref int[] kod)
            {
                Numaralar[0] = 100;
                Numaralar[1] = 200;
                Numaralar[2] = 100;
                Numaralar[3] = 300;
                Numaralar[4] = 100;
                Numaralar[5] = 400;
                Numaralar[6] = 400;
                Numaralar[7] = 700;
                Numaralar[8] = 700;
                Numaralar[9] = 700;
                Numaralar[10] = 400;
                Numaralar[11] = 100;

                isimler[0] = "z";
                isimler[1] = "a";
                isimler[2] = "a";
                isimler[3] = "c";
                isimler[4] = "d";
                isimler[5] = "a";
                isimler[6] = "a";
                isimler[7] = "b";
                isimler[8] = "a";
                isimler[9] = "d";
                isimler[10] = "a";
                isimler[11] = "g";

                kod[0] = 12;
                kod[1] = 13;
                kod[2] = 15;
                kod[3] = 13;
                kod[4] = 13;
                kod[5] = 12;
                kod[6] = 12;
                kod[7] = 13;
                kod[8] = 12;
                kod[9] = 12;
                kod[10] = 13;
                kod[11] = 14;
            }


        }
    }

    16 Aralık 2019 Pazartesi 13:24

Tüm Yanıtlar

  • SimpleMethod'u değiştirmene gerek yok da, ref cok gereksiz bir ekleme olmuş. Array'ler zaten referans tipidir.

    void Main()
    {
    	int[] Numbers = new int[12];
    	string[] Names = new string[12];
    	int[] Code = new int[12];
    	SimpleMethod(Numbers, Names, Code);
    
    	for (int i = 0; i < Numbers.Length; i++)
    	{
    		Console.WriteLine($"{Numbers[i]}, {Names[i]}, {Code[i]}");
    	}
    	Console.ReadLine();
    }
    
    private static void SimpleMethod(int[] Numaralar, string[] isimler, int[] kod)
    {
    	Numaralar[0] = 100;
    	Numaralar[1] = 200;
    	Numaralar[2] = 100;
    	Numaralar[3] = 300;
    	Numaralar[4] = 100;
    	Numaralar[5] = 400;
    	Numaralar[6] = 400;
    	Numaralar[7] = 700;
    	Numaralar[8] = 700;
    	Numaralar[9] = 700;
    	Numaralar[10] = 400;
    	Numaralar[11] = 100;
    
    	isimler[0] = "z";
    	isimler[1] = "a";
    	isimler[2] = "a";
    	isimler[3] = "c";
    	isimler[4] = "d";
    	isimler[5] = "a";
    	isimler[6] = "a";
    	isimler[7] = "b";
    	isimler[8] = "a";
    	isimler[9] = "d";
    	isimler[10] = "a";
    	isimler[11] = "g";
    
    	kod[0] = 12;
    	kod[1] = 13;
    	kod[2] = 15;
    	kod[3] = 13;
    	kod[4] = 13;
    	kod[5] = 12;
    	kod[6] = 12;
    	kod[7] = 13;
    	kod[8] = 12;
    	kod[9] = 12;
    	kod[10] = 13;
    	kod[11] = 14;
    }
    

     


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    16 Aralık 2019 Pazartesi 13:36
    Yanıtlayıcı
  • refler Simple Method içinde mevcut.Simple Method değiştirilmiyor malesef.
    16 Aralık 2019 Pazartesi 13:40
  • Ben de zaten ne dedim? "SimpleMethod'u değiştirmene gerek yok da, ref cok gereksiz bir ekleme olmuş. ". Türkcesi isterseniz değiştirmeyiniz.


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    16 Aralık 2019 Pazartesi 13:50
    Yanıtlayıcı
  • Güncel C#'a göre:

    public static void Main()
    {
    	int[] Numbers = new int[12];
    	string[] Names = new string[12];
    	int[] Code = new int[12];
    	SimpleMethod(ref Numbers, ref Names, ref Code);
    
    	Numbers.Zip(Names.Zip(Code, 
    						(name, code) => (name, code)), 
    				(number, nc) => (number, nc.name, nc.code))
    			.Where(x=>x.number == 100)
    			.ToList()
    			.ForEach(x => Console.WriteLine($"{x.number} : {x.name} : {x.code}"));	
    
    	Console.ReadLine();
    }


    www.cihanyakar.com

    16 Aralık 2019 Pazartesi 17:48
  • teşekkürler.Acaba bu filtrelemeyi Simple Method kullanılmadan önce yapmak mümkün mü ?
    17 Aralık 2019 Salı 08:41
  • teşekkürler.Acaba bu filtrelemeyi Simple Method kullanılmadan önce yapmak mümkün mü ?
    Anlamadım sanırım. SimpleMethod çalışmadan önce tüm dizilerin içi boş olacağından anlamsız olacaktır. 

    www.cihanyakar.com

    17 Aralık 2019 Salı 08:44
  • Haklısınız dizilerin içi önceden boş olacaktır. Ancak SimpleMethod içindeki data çok büyük bu nedenle dizinleri doldurmadan önce kısıtlamaya ihtiyacım var.

    Sadece tek bir dizini doldurmak mümkün mü peki ? Örneğin aşağıdaki gibi sadece Numbers dizini doldursak?

    int[] Numbers = new int[12];
    	string[] Names = new string[12];
    	int[] Code = new int[12];
    	SimpleMethod(ref Numbers,:,: ); //bunun gibi bir yazım mümkün mü?

    private static void SimpleMethod(int[] Numaralar, string[] isimler, int[] kod)

    17 Aralık 2019 Salı 09:04
  • Bence gerçek amacınızı söylerseniz daha kolay ilerleriz. Bu bir veri ise koda koymayın, veritabanına ya da olmadı dosyaya koyun oradan okuyun.

    www.cihanyakar.com

    17 Aralık 2019 Salı 09:16
  • Size en basta cozum verildi zaten. SimpleMethod'u değiştiremiyorum dediniz, ki onun tek yaptigi dizilerin icerigini doldurmak. Sadece Numbers'i göndermek isterseniz bunu yapamazsınız çünkü degistiremediginizi söylediğiniz SimpleMethod hem diger dizileri parametre olarak bekliyor hem de belli uzunlukta beklediği bu dizilerin icerigini dolduruyor. Yapabileceğiniz, o SimpleMethod yerine baska bir metod yazıp onu kullanmak olabilir. SimpleMethod icerigi bu sekilde ise, aslında bu dizilerin degerleri sabit demektir. Bu degerleri bir veritabanına yazarsanız, istediğiniz kısmini cok daha hizli bir sekilde alabilirsiniz.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    17 Aralık 2019 Salı 11:27
    Yanıtlayıcı