出現順を保つユニーク行
alpha、beta、alpha、gamma、betaを1行ずつ貼るとalpha、beta、gammaになります。各行は最初に出た位置に残り、後から出た2つの重複だけが消えます。並べ替えはしません。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- alpha beta alpha gamma beta
- テキスト
- alpha beta gamma
- 行
- alpha, beta, gamma
- 数量
- 3
- 元の値
- alpha beta alpha gamma beta
手作業で集めたリストには、ほぼ必ず繰り返しが混じります。二度貼り付けた SKU、再び発火したログ行、下の段にコピーした順位付きの名前です。表計算でのいつもの手は列を並べ替えて隣り合う双子を消すことですが、それではリストを役立てていた順序が静かに壊れます。出現順を保つユニーク行は、その反対の契約です。本ツールは複数行テキストを上から下へ読み、各行が初めて現れた位置に最初の出現を残し、後の完全一致コピーを捨てます。順位付きプレイリスト、変更履歴、初出在庫が、すでに選んだ並びのまま残ります。周囲の空白を除いて比較する指定もでき、その場合でも最初に書いた表記は保持します。
ユニーク行が並べ替えではなく初出順を保つ仕組み
リストを一意にしながら順序を保つことは、並べ替えてから隣を消すことと同じではありません。並べ替えのあと一意にする流れは順位を書き換えます。最初に書いた SKU、最初に見た誤り、プレイリストの最初の名前が、すべてアルファベット位置へ飛びます。
出現順を保つユニーク行を探す人は、その反対の契約を求めています。本エンジンはファイルを先頭行から末尾行まで歩き、各行を初めて見たときに記憶し、後の完全一致コピーを捨て、生き残った行をその初出の並びに残します。CR・LF・CRLF で分割するため、Windows・Unix・古い Mac のダンプを公平に比べられます。
各行は書かれたままの候補であり、先頭の空行があればそれも候補です。所属判定の既定は完全一致の文字列キーなので、末尾空白と大文字小文字は意味を持ちます。trim が true のとき、所属キーは先頭と末尾の空白を除いた行ですが、残す本文は入力した最初の表記のままです。
ロケール照合も、あいまいな編集距離も、最後の出現での上書きもありません。順序が意味の一部であるときはこのページを使ってください。A–Z が欲しいときは行並べ替えツールを使ってください。
Apple と apple を同一視したいときは大文字小文字を折る重複排除を使ってください。本ランディングは、並べ替えてはならない初出の一意リスト向けです。
初出の一意リストが役に立つ現場
ログ断片やシェル履歴ダンプを整える開発者は、チケットへ貼る前に初出の一意リストが必要であり、いちばん早い誤りをファイルのアルファベット中央へ飛ばしたくはありません。商品とマーチャンダイジングのチームは、順位付き SKU 列をプレーンテキストで書き出し、すでに守ってきた販促順を保った一意値が欲しいと考えます。
プレイリスト編集者、変更履歴の著者、カリキュラム執筆者は、コピーアンドペーストの事故による繰り返しをたたみ、意図した並びは残します。システム管理者は複数源の許可リストを併合し、先に信頼した項目を並べ替えない決定的な一意集合を必要とします。教員はクリップボード由来の事故繰り返しなしに語彙や解答キーの行集合を作ります。
後でアルファベット順、大文字小文字無視のたたみ込み、列キーによる CSV 行重複排除、ほぼ同じ行の意味的なあいまい併合が必要になったときは、出現順を保つユニーク行のこのページに載せ切らず、別の検索意図とランディングとして扱ってください。
活用例
順位付きリストを並べ替えずに一意にする
販促ランキング、プレイリスト、優先待ち行列を貼り付け、後のコピーを捨てつつ、初出の並びを置いた位置のまま残します。
ログと履歴を初出順のまま整える
繰り返すログ行やシェル履歴をたたんでチケットを短くし、アルファベット順にせず、いちばん早い出現を先頭に残します。
よくある質問
出現順を保つユニーク行はどのように動きますか?
エンジンはテキストを CR・LF・CRLF で分割し、各行の最初の出現を残し、後のコピーを捨てます。生き残った行は初出順のままです。並べ替えは行いません。
ユニーク行を並べ替えることと何が違いますか?
並べ替えのあと一意にすると、順位が A–Z に書き換わります。本ツールは並べ替えません。行が初めて現れた位置が、そのまま残る位置です。アルファベット出力が欲しいときは行並べ替えツールを使ってください。
trim オプションは何を変えますか?
trim が true のとき、先頭または末尾の空白だけが違う行は同じ行とみなします。残す本文は、その空白を含めて、入力した最初の表記のままです。
text が無い、または空のときはどうなりますか?
空欄は成功した空の一意リストではなく、クライアント誤りとして扱います。
Appleとappleは同じ行として扱われますか?
扱われません。行はそのまま比べるため、大文字と小文字が違えば別の行になり、両方とも残ります。大文字の違いを無視したい場合は、先にそろえてください。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/str/unique-lines-ordered \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"alpha\nbeta\nalpha\ngamma\nbeta"}'const res = await fetch("https://api.kit.forhosting.com/str/unique-lines-ordered", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "alpha\nbeta\nalpha\ngamma\nbeta"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/unique-lines-ordered",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "alpha\nbeta\nalpha\ngamma\nbeta"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/unique-lines-ordered", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"alpha\\nbeta\\nalpha\\ngamma\\nbeta"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"alpha\nbeta\nalpha\ngamma\nbeta"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/unique-lines-ordered", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "alpha\nbeta\nalpha\ngamma\nbeta"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.unique_lines_ordered",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_chars | 65536 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
空入力は黙った空文字ではなく invalid_input で拒否し、フィールドを結び忘れたクライアントを守ります。成功した API 呼び出しは 1 件あたり $0.002 です。
ユニーク行が並べ替えではなく初出順を保つ仕組み
走査はハッシュ集合を用いる一回の線形パスなので、同じテキストとオプションは常に同じ JSON を返し、テストに固定できます。
送るもの、返るもの、誤り時の動き
任意で trim を真偽値、または true・false・yes・no・one・zero のよくある文字列形で送れます。trim を省略すると false になり、周囲の空白も含めて完全一致で比較します。一意化したい空でない複数行文字列を、必須フィールド text に送ってください。古いクライアントやフォーム生成器が使う名前として、input・value・s・content・body・lines の別名も受け付けます。text の欠落、文字列でない値、長さゼロの文字列は、フィールド名を述べる invalid_input となり、これらの失敗は課金されません。成功時の応答は、改行でつないだユニーク行の text、同じ一意リストの配列 lines、残ったユニーク行数の count、入力のエコー original、一意化前に分割した行数 original_count、捨てた後続コピー数 removed、残した各行の 1 始まりの元位置 first_positions、解決済みの trim、および method の unique_lines_ordered です。典型確認には、banana と apple が繰り返される順位付き果物リストが 3 行に縮み first_positions が元の行を指す例、trim が true のときさらに縮む空白付きリスト、removed がゼロのまま通る単独ユニーク行があります。文書化された文字上限を超える極端に長いペイロードは invalid_input となり、一件の要求がメモリを独占しません。成功した API 呼び出しの料金は、公開されている 1 件あたり $0.002 です。
初出の一意リストが役に立つ現場
本能力は純粋な parse エンジンのため、API 料金は成功 1 件あたり公開ベースの $0.002 であり、検証失敗は残高を消費しません。ペイロードは Worker 隔離に向く通常の文書サイズに留め、数メガバイトの倉庫ダンプにはしないでください。
連携の活用例
乱れた書き出しから安定した fixtures を作る
URL・SKU・メールのプレーンテキストダンプを CI 向けの一意行リストにし、first_positions で各生き残りを元の行へ対応づけます。
技術的な質問
出現順を保つユニーク行の料金はいくらですか。
ブラウザツールは無料です。API 要求は成功 1 回あたり $0.002 のプリペイド KIT 残高を使い、無効な入力は課金されません。