用于显示的智能路径截断/省略号

pet*_*hen 9 string algorithm path

我正在寻找一个existign路径截断算法(类似于Win32静态控件所做的SS_PATHELLIPSIS),用于一组应该关注不同元素的路径.

例如,如果我的路径是这样的:

 Unit with X/Test 3V/
 Unit with X/Test 4V/
 Unit with X/Test 5V/
 Unit without X/Test 3V/
 Unit without X/Test 6V/
 Unit without X/2nd Test 6V/
Run Code Online (Sandbox Code Playgroud)

当没有足够的显示空间可用时,应将它们截断为如下所示:

 ...with X/...3V/
 ...with X/...4V/
 ...with X/...5V/
 ...without X/...3V/
 ...without X/...6V/
 ...without X/2nd ...6V/
Run Code Online (Sandbox Code Playgroud)

(假设省略号通常比三个字母短).

这只是一个相当简单,理想情况的例子(例如,它们现在都以不同的长度结束,当一条路径"Thingie/Long Test /"被添加到路径时,我不知道如何创建一个好的建议游泳池).

路径元素没有给定的结构,它们由用户分配,但是项目通常具有相似的段.它应该适用于比例字体,因此算法应采用度量函数(而不是大量调用)或生成建议列表.

在数据方面,典型的用例将包含2..4个路径段和每个段20个元素.

我正在寻找以前尝试这个方向,如果这是可以解决的合理数量的代码或依赖.

Oak*_*Oak 4

我假设您主要询问如何处理从同一层次结构级别提取的文件夹名称集,因为按行和路径分隔符拆分以及按层次结构深度聚合很简单。

你的问题让我想起了很多最长公共子串问题,区别在于:

  1. 您对许多子字符串感兴趣,而不仅仅是一个。
  2. 你关心秩序。

这些可能看起来很重要,但如果您检查本文中的动态编程解决方案,您会发现它围绕创建“字符冲突”表,然后查找该表中的最长对角线进行。我认为您可以按照出现的顺序枚举表中的所有对角线,然后对于每个路径,按顺序将这些字符串的所有出现替换为省略号。

强制执行最小子字符串长度为 2 将返回与您在问题中概述的结果类似的结果。

看起来确实需要对算法进行一些修改(例如,确保某个子字符串在所有字符串中都是第一个),然后您需要在整个集合上调用它......我希望这至少给您一个可能的方向。