4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TypeScriptからC#へ変換で、はまったポイント

Posted at

TypeScriptからC#へ、プログラム(NormalizeJapaneseAddressesNET)を移植していました。
はまったところをメモします。

正規表現の解釈が異なる

TypeScript(JavaScript)と、.NETとでは、正規表現の解釈が異なる場合があります。

正規表現でのReplace

JavaScriptでは、次の場合、1回のみの置換です。C#で対応するコードは工夫が必要です。

  • 正規表現で、文字列のReplaceを行う
  • 正規表現は、gフラグ(globalフラグ)が無い。

TypeScript

const _pref = pref.replace(/(都|道|府|県)$/, '')

C#

var r = new Regex("(都|道|府|県)$");
var _pref = r.Replace(pref, "", 1);

1は置換する回数です。1回のみ置換します。

number型

JavaScript

numberの、整数の場合の最大値・最小値です。

const biggestInt = Number.MAX_SAFE_INTEGER; // (2**53 - 1) => 9007199254740991
const smallestInt = Number.MIN_SAFE_INTEGER; // -(2**53 - 1) => -9007199254740991

numberを、整数として扱い、整数としての範囲に対応するなら、C#では、integerでは範囲が狭く、代わりにlongを利用するので良いはずです。

C#

int -2,147,483,648  2,147,483,647
long -9,223,372,036,854,775,808 から 9,223,372,036,854,775,807

安定ソート

TypeScript

towns.sort((a, b) => {
    let aLen = a.town.length
    let bLen = b.town.length
    return bLen - aLen
})

JavaScriptの、ArryのSortは、ECMAScript 2019から、安定ソートです。

C#

これを、C#にそのまま移植すると次になります。しかし、安定ソートではありません。

towns.Sort((a, b) =>
  {
      var aLen = a.town.Length;
      var bLen = b.town.Length;
      return bLen - aLen;
  });

安定ソートにするには、OrderByを利用します。

var comparer = new TownsComparer();
towns = towns.OrderBy(x => x, comparer).ToList();

public class TownsComparer : IComparer<SingleTown>
{
    public int Compare(SingleTown a, SingleTown b)
    {
        var aLen = a.town.Length;
        var bLen = b.town.Length;
        if (bLen > aLen)
            return 1;
        else if (aLen == bLen)
            return 0;
        else
            return -1;
    }
}
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?