C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: 配列に入る無駄なNULL


(過去ログ 15 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■5268 / inTopicNo.1)  配列に入る無駄なNULL
  
□投稿者/ ASP (8回)-(2007/07/09(Mon) 14:23:54)

分類:[C#] 

ご質問お願い致します
つくりが悪いせいだと思うんですが、下記コードだとstrk1とstrk2に無駄な配列が用意されてしまいます。
charで受け取った配列の中から必要な箇所だけstrk1とstrk2に入れたいのでここではChar.Length分配列を用意し使用していますが、strk2などの配列数をみると
NULLが入ってる箇所もカウントされてしまうので正確に値が入ってるlength値がでません。
どのようにかいたらいいのでしょうか?お願い致します。
NULLが入っている配列を後から削除してとかっていうのもできるならお願いできますでしょうか。初歩的なことを聞き申し訳ありません。
ご教授お願い致します。

public void strSearchChar(string[] Char,string Find)
{
int n = 0;
int m = 0;
strk1 = new string[Char.Length];
strk2 = new string[Char.Length];

for(int i =0; i < Char.Length;i++)
{
if(Char[i].StartsWith(Find))
{
strk1[n] = Char[i].Replace(Find,"");
n++;
}
else
{
strk2[m] =Char[i].ToString();
m++;
}
}
}

引用返信 編集キー/
■5269 / inTopicNo.2)  Re[1]: 配列に入る無駄なNULL
□投稿者/ επιστημη (559回)-(2007/07/09(Mon) 14:26:38)
επιστημη さんの Web サイト
この関数、何をしてくれるんですか?

引用返信 編集キー/
■5270 / inTopicNo.3)  Re[1]: 配列に入る無駄なNULL
□投稿者/ HiJun (50回)-(2007/07/09(Mon) 14:28:35)
ASPさんのプログラムでのCHAR配列ですが、
CHAR配列内のところどころにNULLが入るのはありですか?

引用返信 編集キー/
■5271 / inTopicNo.4)  Re[2]: 配列に入る無駄なNULL
□投稿者/ HiJun (51回)-(2007/07/09(Mon) 14:36:19)
すみません。Charは引数の名称ですね。orz

Char.Lengthは、記載しているメソッド(ですか?)の呼び元で
宣言しているサイズ分取れるのは当然かと...
NULLが気に入らないのであれば、NULLの位置を取るようにして、
その位置までの文字列を取得するだけだと思います。

引用返信 編集キー/
■5273 / inTopicNo.5)  Re[3]: 配列に入る無駄なNULL
□投稿者/ επιστημη (560回)-(2007/07/09(Mon) 14:46:26)
επιστημη さんの Web サイト
…んー、こゆことなのかな?

using System.Collections.Generic;

class Program {

  string[] strk1;
  string[] strk2;

  public void strSearchChar(string[] Char,string Find) {
    List<string> k1 = new List<string>();
    List<string> k2 = new List<string>();
    foreach ( string item in Char) {
      if( item.StartsWith(Find)) {
        k1.Add(item.Replace(Find,""));
      } else {
        k2.Add(item);
      }
    }
    strk1 = k1.ToArray();
    strk2 = k2.ToArray();
  }

  public void print() {
    foreach ( string item in strk1 ) {
      System.Console.Write("[{0}] ", item == null ? "NULL" : item);
    }
    System.Console.WriteLine();
    foreach ( string item in strk2 ) {
      System.Console.Write("<{0}> ", item == null ? "NULL" : item);
    }
  }

  public static void Main() {
    Program p = new Program();
    p.strSearchChar(new string[] { "aba", "abb", "acb", "aca", "ac" }, "ac" );
    p.print();
  }
}

引用返信 編集キー/
■5274 / inTopicNo.6)  Re[3]: 配列に入る無駄なNULL
□投稿者/ ASP (9回)-(2007/07/09(Mon) 14:47:21)
No5271 (HiJun さん) に返信
> すみません。Charは引数の名称ですね。orz
>
> Char.Lengthは、記載しているメソッド(ですか?)の呼び元で
> 宣言しているサイズ分取れるのは当然かと...
> NULLが気に入らないのであれば、NULLの位置を取るようにして、
> その位置までの文字列を取得するだけだと思います。
返答ありがとう御座います。
この書き方だと当然なのですが、配列にChar[i].Replace(Find,"");
とChar[i].ToString();分を用意して入れたいのですが、先に数が分かっていないので
こういうコードになっています。一番スリムな書き方を知りたかったのですが、
数を先にカウントしてから配列用意してまたまわすようにすればいいのでしょうか?

引用返信 編集キー/
■5276 / inTopicNo.7)  Re[4]: 配列に入る無駄なNULL
□投稿者/ ASP (10回)-(2007/07/09(Mon) 14:49:41)
No5273 (επιστημη さん) に返信
> …んー、こゆことなのかな?
>
> using System.Collections.Generic;
>
> class Program {
>
> string[] strk1;
> string[] strk2;
>
> public void strSearchChar(string[] Char,string Find) {
> List<string> k1 = new List<string>();
> List<string> k2 = new List<string>();
> foreach ( string item in Char) {
> if( item.StartsWith(Find)) {
> k1.Add(item.Replace(Find,""));
> } else {
> k2.Add(item);
> }
> }
> strk1 = k1.ToArray();
> strk2 = k2.ToArray();
> }
>
> public void print() {
> foreach ( string item in strk1 ) {
> System.Console.Write("[{0}] ", item == null ? "NULL" : item);
> }
> System.Console.WriteLine();
> foreach ( string item in strk2 ) {
> System.Console.Write("<{0}> ", item == null ? "NULL" : item);
> }
> }
>
> public static void Main() {
> Program p = new Program();
> p.strSearchChar(new string[] { "aba", "abb", "acb", "aca", "ac" }, "ac" );
> p.print();
> }
> }
ありがとう御座います。
バージョン書き忘れましたが1.1なのでジェネレータは使えませんが参考にさせていただきます。
ありがとう御座います。
引用返信 編集キー/
■5277 / inTopicNo.8)  Re[5]: 配列に入る無駄なNULL
□投稿者/ ASP (11回)-(2007/07/09(Mon) 14:57:33)
あーすいませんジェネリクスですね。
引用返信 編集キー/
■5278 / inTopicNo.9)  Re[5]: 配列に入る無駄なNULL
□投稿者/ HiJun (52回)-(2007/07/09(Mon) 15:03:50)
補足ですが、
επιστημηさんの提示していただいたソースの
foreach文の中で、nullの判定文をいれてやれば
OKかと思います。

引用返信 編集キー/
■5279 / inTopicNo.10)  Re[5]: 配列に入る無駄なNULL
□投稿者/ επιστημη (561回)-(2007/07/09(Mon) 15:07:49)
επιστημη さんの Web サイト
2007/07/09(Mon) 17:08:51 編集(投稿者)
ときにこんなテもある。
strk[0 .. pos-1] : strk1 相当
strk[pos .. Length-1] : strk2 相当

class Program {

  string[] strk;
  int pos;

  public void strSearchChar(string[] Char,string Find) {
    strk = new string[Char.Length];
    pos = 0;
    int rpos = Char.Length;
    foreach ( string item in Char) {
      if( item.StartsWith(Find)) {
        strk[pos++] = item.Replace(Find,"");
      } else {
        strk[--rpos] = item;
      }
    }
    System.Array.Reverse(strk, pos, strk.Length-pos);
  }

  public void print() {
    for ( int i = 0; i < pos; ++i ) {
      System.Console.Write("[{0}] ", strk[i]);
    }
    System.Console.WriteLine();
    for ( int i = pos; i < strk.Length; ++i ) {
      System.Console.Write("<{0}> ", strk[i]);
    }
  }

  public static void Main() {
    Program p = new Program();
    p.strSearchChar(new string[] { "aba", "abb", "acb", "aca", "ac" }, "ac" );
    p.print();
  }
}

> ありがとう御座います。

質問ヘタ。
回答者に質問の意図を"伝え"にゃあかんでしょ。
"察してもらって"どうするよ!?

引用返信 編集キー/
■5292 / inTopicNo.11)  Re[6]: 配列に入る無駄なNULL
□投稿者/ HiJun (53回)-(2007/07/09(Mon) 20:03:39)
う〜ん...
応答がない...
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -