真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C#刪除數(shù)組內(nèi)的某個值、一組值方法詳解

最近優(yōu)化了一個權(quán)限校驗的功能,之前每次其他系統(tǒng)在獲取各自系統(tǒng)的權(quán)限配置時,sso都去找到本地對應(yīng)的權(quán)限文件讀取解析一次。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供恩施土家企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)html5、小程序制作等業(yè)務(wù)。10年已為恩施土家眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

這種設(shè)計雖然可以實現(xiàn)功能,但是這種反復(fù)去讀取的策略并不經(jīng)濟(jì),尤其在高并發(fā)的情況下更可能會成為性能瓶頸。

于是我對這塊業(yè)務(wù)進(jìn)行了優(yōu)化,而在優(yōu)化的過程中針對如何去除數(shù)組內(nèi)的某些參數(shù)試驗了一些寫法,下面記錄我認(rèn)為比較優(yōu)雅的寫法。

首先講下場景,設(shè)計多系統(tǒng)的權(quán)限統(tǒng)一由sso控制,那么每次用戶登錄其他系統(tǒng)后需要向sso請求“用戶在該系統(tǒng)已有的權(quán)限”或“該用戶當(dāng)前是否擁有該功能的操作權(quán)限”。

那么sso需要在權(quán)限驗證通過后再去獲取該用戶當(dāng)前的權(quán)限信息并返回,于是在權(quán)限校驗的service中,我在構(gòu)造器里根據(jù)已有的系統(tǒng)類型先獲取一次對應(yīng)完整的權(quán)限樹,后面如果發(fā)現(xiàn)有缺失再嘗試讀取文件,不缺失則直接讀緩存配置。

已有的系統(tǒng)通過枚舉來記錄,假設(shè)定義如下:

public enum EnumSystemType
{
  NoMenu = 0, // 不需要權(quán)限樹的系統(tǒng)或程序
  App01 = 1,
  App02 = 2,
  ......
}

每個系統(tǒng)的權(quán)限配置保存在各自的文件中,例如App01完整的權(quán)限樹保存在App01.json中。

接著就是根據(jù)已有的系統(tǒng)去獲取每個文件的內(nèi)容并解析成權(quán)限樹緩存下來。而在獲取文件內(nèi)容時,不需要獲取權(quán)限的枚舉(NoMenu)需要跳過找文件讀取的邏輯。這里我借助的是linq的功能來實現(xiàn)過濾該枚舉值的邏輯。

using System.Linq;

private Dictionary> GetPermissions()
{
  //todo

  foreach (var fileName in Enum.GetNames(typeof(EnumSystemType))
     .Where(s => s != nameof(EnumSystemType.NoMenu))
     .ToArray())
  {
    //todo
  }

  //todo
}

PS. Enum.GetNames的返回值是字符串?dāng)?shù)組。

單個參數(shù)的過濾通過where很容易就實現(xiàn)了,我突然想到一個問題,如何實現(xiàn)批量過濾一些枚舉值呢?

查了查資料,linq果然有解決方案,就是通過“Except”。

接著我還是以上面的例子來試驗,假如我希望構(gòu)造器讀取時跳過NoMenu和App01,可以這么寫:

using System.Linq;

private Dictionary> GetPermissions()
{
  //todo

  var exceptPermissions = new []
  {
    nameof(EnumSystemType.NoMenu),
    nameof(EnumSystemType.App01),
  };

  foreach (var fileName in Enum.GetNames(typeof(EnumSystemType))
    .Except(exceptPermissions)
    .ToArray())
  {
    //todo
  }

  //todo
}

總結(jié):

1. 如何在一個數(shù)組中移除某個值的寫法:linq的where

2. 如何在一個數(shù)組中移除多個值的寫法:linq的except

C#如何刪除數(shù)組中的一個元素

C#如何刪除數(shù)組中的一個元素,剩余的元素組成新數(shù)組,數(shù)組名不變

double[] arr = new double[n];

需要刪除的是第m+1個數(shù)據(jù)arr[m]

求新數(shù)組arr.(新數(shù)組arr包含n-1個元素)

m,n數(shù)值已知

double[] arr = new double[50];
List list = arr.ToList();
list.RemoveAt(5+1);
double[] newarr = list.ToArray();

以上就是C# 刪除數(shù)組內(nèi)的某個值、一組值方法詳解的詳細(xì)內(nèi)容,更多關(guān)于C# 如何刪除數(shù)組內(nèi)的某個值、一組值的資料請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!


當(dāng)前題目:C#刪除數(shù)組內(nèi)的某個值、一組值方法詳解
文章起源:http://weahome.cn/article/pscoje.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部